package com.ruoyi.foodworks.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.foodworks.domain.Likes;
import com.ruoyi.foodworks.domain.LikesVO;

/**
 * 作品点赞Service接口
 * 
 * @author lpt
 * @date 2025-08-12
 */
public interface LikesService
{
    /**
     * 查询作品点赞
     * 
     * @param id 作品点赞主键
     * @return 作品点赞
     */
    public Likes selectLikesById(Integer id);

    /**
     * 查询作品点赞列表
     * 
     * @param likes 作品点赞
     * @return 作品点赞集合
     */
    public List<Likes> selectLikesList(Likes likes);

    /**
     * 新增作品点赞
     * 
     * @param likes 作品点赞
     * @return 结果
     */
    public int insertLikes(Likes likes);

    /**
     * 修改作品点赞
     * 
     * @param likes 作品点赞
     * @return 结果
     */
    public int updateLikes(Likes likes);

    /**
     * 批量删除作品点赞
     * 
     * @param ids 需要删除的作品点赞主键集合
     * @return 结果
     */
    public int deleteLikesByIds(Integer[] ids);

    /**
     * 删除作品点赞信息
     * 
     * @param id 作品点赞主键
     * @return 结果
     */
    public int deleteLikesById(Integer id);

    /**
     * 查询作品点赞列表（包含用户昵称和作品内容）
     * 
     * @param likes 作品点赞
     * @return 作品点赞集合
     */
    public List<LikesVO> selectLikesVOList(Likes likes);

    /**
     * Redis点赞操作（点赞/取消点赞）
     * 
     * @param likerUid 点赞用户ID
     * @param authorUid 被点赞作者ID
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @return 操作结果
     */
    public Map<String, Object> redisLike(Integer likerUid, Integer authorUid, Integer targetId, Integer targetType);

    /**
     * 获取用户点赞状态
     * 
     * @param userId 用户ID
     * @param targetIds 目标ID列表
     * @param targetType 目标类型
     * @return 已点赞的目标ID列表
     */
    public List<Integer> getUserLikeStatus(Integer userId, List<Integer> targetIds, Integer targetType);

    /**
     * 获取作品点赞数
     * 
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @return 点赞数
     */
    public Integer getLikeCount(Integer targetId, Integer targetType);

    /**
     * 批量获取作品点赞数
     * 
     * @param targetIds 目标ID列表
     * @param targetType 目标类型
     * @return 点赞数映射
     */
    public Map<Integer, Integer> getLikeCounts(List<Integer> targetIds, Integer targetType);
}
